perm filename GREDX.F4[NEW,LCS]15 blob
sn#424762 filedate 1979-03-08 generic text, type T, neo UTF8
00100 C SUBRS. VLINE, ASKIT, GRED, LPEN, SAVIT, LISTP ***************
00200
00300
00400 SUBROUTINE VLINE(R3,R4,R5,R6)
00500 INTEGER ASK
00600 COMMON /MKX/KSLA,ISEMI,LESS,IGT/A2Z/LAA,LBB,NONO(9),LEL
00700 COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK /IDEV/IDEV
00800 267 IF(IDEV.EQ.5)
00900 1 CALL TYPSTR('TYPE STAFF #, POS1, POS2 AND CODE # ')
01000 READ(IDEV,F78F,END=167)R3,R4,R5,R6
01100 CQQ ACCEPT F78F,R3,R4,R5,R6
01200 REREAD FA1,ASK
01300 IF(ASK.EQ.LESS)GO TO 167
01400 CALL LO2UP(ASK)
01500 IF(ASK.NE.IGT)GO TO 2
01600 IDEV=1
01700 GO TO 267
01800 2 IF(ASK.EQ.LBB)R3=99
01900 C 99 IS ALSO USED IN MOVER.F4
02000 IF(R3.GE.99)RETURN
02100 IF(ASK.NE.LEL)GO TO 66
02200 C TYPE 'L' FOR LIGHT-PEN
02300 K=-1
02400 67 R4=RY
02500 CALL LPEN(R3,RY,RX)
02600 REREAD FA1,ASK
02700 CALL LO2UP(ASK)
02800 IF(ASK.EQ.LBB)R3=99
02900 IF(R3.GE.99)RETURN
03000 K=-K
03100 IF(K.GT.0)GO TO 67
03200 R5=RY
03300 C LIGHT PEN IS READ TWICE
03400 66 ASK=-1
03500 IF(R6.LT.100)GO TO 1
03600 R6=R6-100
03700 C FOR 'ASK' ADD 100 TO PARAM NUMBER GIVEN.
03800 ASK=0
03900 1 CALL BOX(-1,R4)
04000 CALL BOX(-2,R5)
04100 C PUTS UP TWO VERTICAL LINES
04200 RETURN
04300 CCC3 FORMAT(' TYPE STAFF #, POS1, POS2 AND CODE # '$)
04400 167 IDEV=5
04500 GO TO 267
04600 END
04700
04800
04900 SUBROUTINE ASKIT
05000 INTEGER ASK
05100 COMMON /DPY/ST(4000),MEDIT,IGO/A2Z/NONO(6),LGG
05200 COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK
05300 COMMON /XRN/RN(1) /KJY/ K,JY
05400 IGO=0
05500 CALL DPYNEW
05600 X=ST(2)
05700 CALL BOX(JY,RN(JY+2))
05800 ST(2)=X
05900 CALL TYPSTR('N=NO, <CR>=YES, G=GO ')
06000 ACCEPT FA1,K
06100 IF(K.EQ.LGG)ASK=-1
06200 CALL DPYNEW
06300 IGO=1
06400 END
06500
06600 SUBROUTINE GRED
06700 INTEGER PWDS
06800 COMMON /MKX/KSLA,ISEMI,LESS,IGT
06900 1/A2Z/LAA,LBB,NONO(9),LEL,LMM,LNN,NON(9),LXX
07000 COMMON /DPY/IST(4000),MEDIT,IGO /IDEV/IDEV
07100 COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK /KJY/ K,JY
07200 COMMON/SCM/V(78),ISCR,LCNT,RSTF,LIST(200),REND
07300 COMMON R2,JA,J,J2,RJQ(6),RC,IZ,RX,KV,RY,IA,IB,C,D,JZ,A,
07400 1 NX,VY,RB,JQ(20) /XRN/RN(1) /ALF/INP(72),ML
07500 COMMON /PTR/PWDS(1) /POSI/STFF(8),JJB,POS
07600 1 /LIMIT/LIMIT,ITEM,L,I,IX
07700 1 /RINP/R(10,80),RPOS(100) /DPTR/IWDS(1)
07800
07900 EQUIVALENCE (IST2,IST(2))
08000 RC=999
08100 RSTF=RC
08200 CC **CAN'T GET HERE ***IF(INP(1).NE.'A'.AND.INP(1).NE.'D')GO TO 1
08300 C LEAVES ROUTINE
08400 7 CALL VLINE(R2,Z,POS,RX)
08500 C PUTS UP TWO VERTICAL LINES
08600 REREAD FA1,NX
08700 CALL LO2UP(NX)
08800 IF(NX.EQ.LBB)GO TO 170
08900 IF(R2.LT.99)GO TO 70
09000 170 JA=98
09100 RETURN
09200 70 IF(POS.EQ.0)POS=200
09300 C 0,0 DOES WHOLE STAFF
09400 IF(INP(1).NE.LAA)GO TO 4
09500 267 IF(IDEV.EQ.1)GO TO 467
09600 CALL TYPSTR(' TYPE P#, CHNG, P#, CHNG, P#, CHNG, ...')
09700 CALL TYPCRLF
09800 467 READ(IDEV,F78F,END=167)V
09900 CQQ ACCEPT F78F,V
10000 REREAD FA1,K
10100 C TYPE 'L' FOR LIGHT PEN
10200 IF(K.EQ.LESS)GO TO 167
10300 CALL LO2UP(K)
10400 IF(K.NE.IGT)GO TO 367
10500 IDEV=1
10600 GO TO 267
10700 367 IF(V(1).EQ.99)GO TO 7
10800 IF(K.EQ.LBB)GO TO 7
10900 C TYPE 'B' OR 99 TO BACKUP
11000 IF(K.NE.LEL)GO TO 66
11100 DO 67 K=1,2
11200 V(2)=RY
11300 CALL LPEN(V(1),RY,RX)
11400 REREAD FA1,JA
11500 CALL LO2UP(JA)
11600 IF(JA.EQ.LBB)GO TO 7
11700 67 IF(V(1).GE.99)GO TO 7
11800 V(3)=RY
11900 66 JA=0
12000 IZ=0
12100 C COUNTER
12200 GO TO 14
12300 167 IDEV=5
12400 GO TO 267
12500 4 JA=98
12600 C FOR DELETIONS
12700 C STF.N, -99 -- DELETES ALL BUT STAFF N.
12800 IF(Z.NE.-99)GO TO 14
12900 RSTF=R2
13000 R2=99
13100 14 NX=0
13200 C LOOP STARTS HERE
13300 J=0
13400 140 NX=NX+1
13500 142 JY=PWDS(NX)
13600 RB=RN(JY+3)
13700 IF(RTLINE(JY))GO TO 6
13800 IF(RB.LT.Z)GO TO 6
13900 IF(RB.GT.POS)GO TO 6
14000 IF(RN(JY+2).EQ.RSTF)GO TO 6
14100 C FOR -99 DELETES.
14200 RB=RN(JY+1)
14300 IF(V(1).EQ.12)GO TO 77
14400 IF(V(1).EQ.100)GO TO 341
14500 C USE P100 AND ANY CODE# TO CREATE CUES. I.E. MINI NOTES, RESTS, BEAMS.
14600 IF(RC.EQ.999)GO TO 143
14700 C USE P12 TO INVERT STEM, BEAM AND SLURS ALL AT ONCE.
14800 C SET 12 TO 1 WITH CODE 5 TO INVERT SLURS ONLY
14900 77 RC=0
15000 IF(RB.EQ.5)GO TO 141
15100 IF(RB.NE.6)GO TO 143
15200 IF(RX.EQ.1)GO TO 141
15300 143 IF(RB.NE.RX.AND.RX.NE.0)GO TO 6
15400 IF(ASK)GO TO 100
15500 CALL ASKIT
15600 IF(K.EQ.LNN)GO TO 6
15700 IF(K.EQ.LXX)GO TO 19
15800 100 IF(INP(1).EQ.LAA)GO TO 141
15900 IF(J)GO TO 40
16000 J=-1
16100 K=NX
16200 41 IZ=NX
16300 IF(NX.LT.ITEM)GO TO 140
16400 40 IF(NX-IZ.EQ.1)GO TO 41
16500 C GO BACK FOR MORE - IF IN RIGHT ORDER.
16600 C RANGE TO DEL. = K→NX
16700 45 J=IZ+1
16800 IA=PWDS(K)
16900 IB=PWDS(J)-IA
17000 JZ=IWDS(K)
17100 J2=IWDS(J)-JZ
17200 J=J-K
17300 ITEM=ITEM-J
17400 DO 42 IZ=K,ITEM+1
17500 PWDS(IZ)=PWDS(IZ+J)-IB
17600 42 IWDS(IZ)=IWDS(IZ+J)-J2
17700 IST2=IST2-J2
17800 I=I-IB
17900 CALL LOOP(IA,I,1,0,IB,RN)
18000 CALL LOOP(JZ+2,IST2+2,1,0,J2,IST)
18100 IF(K.GE.ITEM)GO TO 1
18200 C EXITS
18300 NX=K+1
18400 GO TO 142
18500 341 IF(RB.EQ.6)GO TO 141
18600 IF(RB.GT.2)GO TO 6
18700 141 IF(IZ.GE.97)GO TO 9
18800 C THERE'S A LIMIT TO THE R ARRAY 4/18/73
18900 IZ=IZ+1
19000 C FOUND AN ITEM
19100 R(1,IZ)=223
19200 C 223 IS CODE NUMB. FOR EDIT MODE
19300 R(2,IZ)=NX
19400 10 IZ=IZ+1
19500 DO 101 KV=3,10
19600 101 R(KV,IZ)=0
19700 IF(V(1).NE.100)GO TO 131
19800 231 R(1,IZ)=400
19900 C MAKES MINI NOTES, RESTS, BEAMS
20000 R(2,IZ)=100
20100 GO TO 6
20200 131 IF(RC.EQ.999)GO TO 11
20300 IF(RB.EQ.1)GO TO 30
20400 31 RC=RN(JY+7)
20500 IF(RB.EQ.6)GO TO 32
20600 C NEXT INVERTS DIP
20700 IF(RX.EQ.1)GO TO 35
20800 A=-1.6
20900 RB=-10
21000 IF(RC)A=-A
21100 CC***???? WHY CHANGE P2??? ****36 R(7,IZ)=2
21200 CC*** R(8,IZ)=RN(JY+2)+A
21300 GO TO 37
21400 35 RB=-4
21500 IF(RN(JY+8).LT.-1)RB=-1.4
21600 C 2 AND .7 ARE HGTS SET IN 'BEAMS'
21700 37 IF(RC)RB=-RB
21800 R(3,IZ)=4
21900 R(4,IZ)=RN(JY+4)+RB
22000 R(6,IZ)=RN(JY+5)+RB
22100 R(5,IZ)=5
22200 33 R(1,IZ)=7
22300 R(2,IZ)=-RC
22400 GO TO 6
22500 32 IF(RC.LT.20)GO TO 34
22600 C THIS IS FOR BEAMS
22700 232 RC=10-RC
22800 GO TO 33
22900 132 IF(RC.GT.-20)GO TO 232
23000 GO TO 332
23100 34 IF(RC)GO TO 132
23200 C P7 IS NEG FOR TREMOLOS
23300 332 RC=-10-RC
23400 GO TO 33
23500
23600 C NEXT INVERTS STEMS EITHER WAY. USE ANY #>11 WITH CODE 1 TO INVERT.
23700 C MUST! BE FIRST IN LIST!!!
23800 C RC=0
23900 30 RB=RN(JY+5)
24000 IF(RB.LT.10)GO TO 12
24100 C NO STEM < 10
24200 RC=10
24300 IF(RB.GE.20)RC=-RC
24400 RB=RB+RC
24500 12 V(1)=5.
24600 V(2)=RB
24700 C SO IT WILL DISPLAY RESULT
24800 11 DO 8 K=1,10
24900 8 R(K,IZ)=V(K)
25000 6 IF(J)GO TO 45
25100 IF(NX.LT.ITEM)GO TO 140
25200 19 IF(INP(1).NE.LAA)GO TO 1
25300 9 R(1,IZ+1)=222
25400 R(1,IZ+2)=0
25500 CC REND=-1.
25600 1 CALL HYDPOG(3)
25700 END
25800
25900 SUBROUTINE LPEN(A,B,C)
26000 COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK /SIZ/RSZ,JCEN,KCEN
26100 COMMON /POSI/STFF(0/7),JJ2,POS /ALF/INP(71),M,L /C/MM,LL
26200 COMMON /A2Z/LAA,LBB,NONO(21),LXX
26400 M=MM
26500 L=LL
26600 IF(IABS(M).GT.512)GO TO 4
26700 IF(IABS(L).LE.512)GO TO 3
26800 4 M=0
26900 L=100
27000 3 CALL SETCUR(M,L,0)
27100 CALL TYPSTR('TYPE <CR> TO SET POINT')
27200 ACCEPT FA1,JD
27300 IF(JD.EQ.'9')RETURN
27400 IF(JD.EQ.LXX)RETURN
27500 C TYPE 'B' OR 99 TO BACK UP
27600 IF(JD.EQ.LBB)RETURN
27700 CALL RDCUR(M,L)
27900 L=(L+KCEN)/RSZ
28000 1 B=((M+JCEN)/RSZ+596.0)/5.96
28100 C B=HORIZ. STEP NUM.
28200 DO 13 K=0,7
28300 M=STFF(K)+60.
28400 IF(L.GT.M)GO TO 13
28500 A=K
28600 C A=STAFF NUM.
28700 GO TO 8
28800 13 CONTINUE
28900 8 C=IFIX((L-STFF(K)+21.)/7.+.5)
29000 C FINDS VERT. NOTE NUM.
29100 TYPE F78F,A,B
29200 END
29300
29400
29500 SUBROUTINE SAVIT
29600 IMPLICIT INTEGER(A-Q,S-Z)
29700 COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK/DL/X22,SAVER,NAME,EXT
29800 1 /POSI/STFF(0/7),JJ2,IPOS /LIMIT/LIMIT,ITEM,L,I,IX
29900 1 /SCM/V(78),ISCR,LCNT,IRSTF,LIST(200),REND
30000 1 /ALF/INP(72),ML/XRN/RN(1)/DPY/ST(4000),MEDIT,IGO
30100 1 /STF/RSTFAC(0/7),RSTJ2 /PTR/PWDS(1) /JCHAR/IXX,ISEMI,IBLA
30200 COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
30300 COMMON /A2Z/LAA,LBB,LCC,LDD,NONO(8),LMM,LNN,NON(4),LSS
30500 DIMENSION SV(128)
30600 EQUIVALENCE (INP2,INP(2)),(ST2,ST(2)),(SV,LIST)
30700 C 'SAME' WILL REPEAT CURRENT NAME. BLANK WILL USE TMP.DMD
30800 KX=-1
30900 K=0
31000 32 K=K+1
31100 C THIS IS TO REPAIR DAMAGE DONE BY UNKNOWN BUGS!!!!
31200 33 L=PWDS(K)
31300 IA=PWDS(K+1)
31400 IB=RN(L)+3.+L
31500 C THIS SHOULD BE NEW POINTER
31600 IF(IA-IB.EQ.0)GO TO 36
31700 IF(RN(IB)+3+IB.NE.PWDS(K+2))GO TO 38
31800 J=K+1
31900 PWDS(J)=IB
32000 CALL TYPSTR('?FIXED UP ITEM ')
32100 CALL TYPINT(J)
32200 CALL TYPCRLF
32300 GO TO 36
32400 38 IJ=IA-L
32500 DO 39 J2=K+1,ITEM
32600 39 PWDS(J2)=PWDS(J2+1)-IJ
32700 CALL TYPSTR('BAD ITEM--')
32800 CALL TYPINT(K)
32900 CALL TYPCRLF
33000 IF(KX.EQ.0)GO TO 50
33100 CALL TYPSTR('NAME.EXT? ')
33300 ACCEPT 141,INP
33400 CALL NAMEXT(INP,NAME,EXT)
33500 C ONLY DOES THIS ON THE FIRST ERROR
33600 GO TO 2
33700 50 J=RJ
33800 KX=0
33900 CALL LOOP(L,I,1,0,J,RN)
34000 C REARRANGES DATA
34100 I=I-J
34200 ITEM=ITEM-1
34300 IF(ITEM.LE.K)GO TO 37
34400 GO TO 33
34500 C GO BACK AND TRY AGAIN
34600 36 IF(IA.LE.L)GO TO 38
34700 C JUMP IF PWDS IS OUT OF ORDER
34800 IF(K.LT.ITEM)GO TO 32
34900 37 KX=-1
35000 IF(SAVER.GE.0)GO TO 10
35200 SAVER=5
35300 101 CALL PUTEXT('TMP','DMD')
35400 GO TO 102
35500 1 FORMAT(I,24F)
35600 2 CALL TYPCHR('WRITE OVER ',13)
35700 CALL TYPWRD(NAME)
35800 CALL TYPCHR('.',1)
35900 CALL TYPCHR(EXT,3)
36000 CALL TYPCHR('? ',3)
36300 ACCEPT 141,INP
36350 CALL LULOOP
36400 IF(INP(1).NE.LNN)GO TO 4
36800 10 IF(INP2.EQ.LMM)GO TO 4
36900 11 L=NAME
37000 INP(1)=-1
37100 CALL NAMEXT(INP,NAME,EXT)
37300 IF(NAME.NE.IBLA)GO TO 40
37400 CALL TYPSTR('NAME.EXT? ')
37600 ACCEPT 141,INP
37700 CALL NAMEXT(INP,NAME,EXT)
37800 IF(NAME.EQ.IBLA)GO TO 4
38000 C 99 WILL BACK UP.
38100 IF(NAME.NE.'99')GO TO 40
38200 NAME=L
38300 RETURN
38400 40 IF(NAME.NE.'SAME')GO TO 43
38500 NAME=L
38600 GO TO 4
38700 141 FORMAT(72A1)
39000 43 IF(LOOKX(NAME,EXT))GO TO 2
39100 C JUMP BACK IF FILE NAME ALREADY ON DSK
39200 4 IF(KX.EQ.0)GO TO 50
39400 IF(NAME.NE.IBLA)GO TO 41
39500 NAME=L
39600 GO TO 101
39800 41 CALL PUTEXT(NAME,EXT)
40100 42 IF(INP2.EQ.LDD)GO TO 202
40200 C SB=SAVE BIG; SD=SAVE DPY ONLY; SM=SB WITH SAME NAME
40300 102 IRSTF=0
40400 IF(INP2.EQ.LBB)IRSTF=-1
40500 JJ2=ITEM+2
40600 IPOS=I
40700 C WD CNTS
40800 CALL EXTOUT(RSTFAC,128)
40900 C INCLUDES STFF AND V ARRAYS
41000 CALL EXTOUT(PWDS,JJ2)
41100 CALL EXTOUT(RN,IPOS)
41200 IF(LCNT.GT.1)CALL EXTOUT(LIST,LCNT)
41300 CC102 WRITE(21)ITEM,I
41400 CC 1,(PWDS(L),L=1,ITEM+1),(RN(L),L=1,I-1),ISCR,(V(L),L=1,ISCR),
41500 CC 1 LCNT,(LIST(L),L=1,LCNT),RSTFAC,STFF,SV
41600 C (SV) FOR FORTRAN READ BUG!!!!
41700 CC IF(SAVER.GE.0)WRITE(21)RSTFAC,STFF,L
41800 C NOT USED WHEN SAVE IS AUTOMATIC.
41900 C TAKE OUT ABOVE WHEN BUG IS SOMEDAY FIXED IN F4.
42000 IF(I.LE.LIMIT)GO TO 20
42100 CALL TYPSTR('****** TOO MUCH DATA TO PRINT - ')
42200 CALL TYPINT(I)
42300 CALL TYPCHR('/',1)
42400 CALL TYPINT(LIMIT)
42600 20 IF(INP2.EQ.LBB)CALL EXTOUT(ST,4302)
42900 1001 CALL FINEXT
43000 IF(INP(1).NE.LSS)RETURN
43200 IF(NAME.NE.IBLA)RETURN
43300 CALL TYPSTR('DISPLAY SAVED IN "TMP.DMD"')
43400 CALL TYPCRLF
43500 C GO BACK IF THE SAVER WROTE THE FILE
43600 RETURN
43700 202 WRITE(21),ST2,(ST(L),L=1,ST2+2)
43800 GO TO 1001
43900 C WRITES DPY BUFFER ONLY.
44000 END
44100
44200 SUBROUTINE LISTP(LST)
44300 IMPLICIT INTEGER(A-Q,S-Z)
44400 DIMENSION LST(1)
44500 COMMON/SCM/V(78),ISCR,LCNT,RSTF,LIST(200),REND
44600 COMMON R2,JA,CENTR,J2,RJQ(20),JQ(16),K,JY,X,Y /XRN/RN(1)
44700 1 /STF/RSTFAC(0/7),RSTJ2 /LIMIT/LIMIT,ITEM,L,I,IX /PTR/PWDS(1)
44800 EQUIVALENCE (JC,JQ(1)),(JD,JQ(2)),(RJC,RJQ(1)),(RJD,RJQ(2))
44900
45000 CALL NOZERO(R2)
45100 JC=RJC
45200 IF(JC.EQ.0)JC=ITEM
45300 JY=5
45400 JD=RJD
45500 IF(JD.NE.0)JY=3
45600 DO 6334 L=IFIX(R2),JC
45700 X=PWDS(L)
45800 Y=RN(X)+2+X
45900 X=X+1
46000 K=RN(X)
46400 6334 WRITE(JY,6333),L,LST(K),(RN(K),K=X,Y)
46500 C P, N1, N2, N3 TYPES ITEM LIST. N1=1ST, N2=LAST, N3=TO LPT?
46600 C LEAVE THIS HERE SO WRITE(JY, OF R IS POSSIBLE IN DDT
46800 6333 FORMAT(I4,') ',A5,2F4.0,F8.3,F8.2,7F10.2)
46900 END